#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
串口设备AT指令控制器 - 加密保护版
版本：2.0
作者：Zack Studio
功能：主题管理、多指令序列、数据解析配置、反编译保护
"""

import os
import sys
import time
import threading
from datetime import datetime

# 添加路径
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

# 导入保护模块
try:
    from src.utils.startup_guard import startup_guard, protected_main
    from src.utils.encryption import anti_decompile, CodeObfuscator
    PROTECTION_ENABLED = True
except ImportError:
    PROTECTION_ENABLED = False
    print("⚠️  保护模块加载失败，继续运行基础版本")

# 导入主程序
from main import AdvancedATController

def run_with_protection():
    """运行带保护的主程序"""
    
    # 执行启动保护
    if PROTECTION_ENABLED:
        if not protected_main():
            print("❌ 启动保护检查失败")
            return False
    
    # 创建主控制器实例
    try:
        controller = AdvancedATController()
        
        # 显示保护信息
        if PROTECTION_ENABLED:
            print("🔒 加密保护已启用")
            print("📊 反调试保护：激活")
            print("🛡️  完整性检查：通过")
            print("⚡ 启动时间优化：完成")
        
        # 运行主程序
        print("\n🚀 启动串口设备AT指令控制器...")
        
        # 这里可以调用主程序的主循环
        # 为了演示，我们显示菜单
        show_main_menu(controller)
        
        return True
        
    except Exception as e:
        print(f"❌ 程序启动错误: {e}")
        return False

def show_main_menu(controller):
    """显示主菜单"""
    print("\n" + "="*60)
    print("        串口设备AT指令控制器 v2.0 - 加密保护版")
    print("="*60)
    print("1. 串口连接管理")
    print("2. 主题管理")
    print("3. VBAT监控")
    print("4. 指令测试")
    print("5. 系统信息")
    print("0. 退出程序")
    print("="*60)
    
    while True:
        choice = input("\n请选择功能 [0-5]: ").strip()
        
        if choice == "1":
            handle_serial_menu(controller)
        elif choice == "2":
            handle_topic_menu(controller)
        elif choice == "3":
            handle_vbat_menu(controller)
        elif choice == "4":
            handle_test_menu(controller)
        elif choice == "5":
            show_system_info()
        elif choice == "0":
            print("👋 感谢使用，再见！")
            break
        else:
            print("❌ 无效选择，请重试")

def handle_serial_menu(controller):
    """串口连接管理菜单"""
    print("\n📡 串口连接管理")
    print("-" * 30)
    
    ports = controller.list_available_ports()
    if ports:
        print("可用串口:")
        for i, port in enumerate(ports, 1):
            print(f"{i}. {port}")
        
        try:
            port_choice = int(input("选择串口编号: ")) - 1
            if 0 <= port_choice < len(ports):
                port = ports[port_choice]
                if controller.connect(port):
                    print(f"✅ 已连接到 {port}")
                else:
                    print(f"❌ 连接 {port} 失败")
            else:
                print("❌ 无效选择")
        except ValueError:
            print("❌ 请输入有效数字")
    else:
        print("❌ 未找到可用串口")

def handle_topic_menu(controller):
    """主题管理菜单"""
    print("\n📋 主题管理")
    print("-" * 30)
    controller.list_topics()

def handle_vbat_menu(controller):
    """VBAT监控菜单"""
    print("\n🔋 VBAT监控")
    print("-" * 30)
    controller.configure_vbat_monitor()

def handle_test_menu(controller):
    """指令测试菜单"""
    print("\n🧪 指令测试")
    print("-" * 30)
    
    if hasattr(controller, 'serial_controller') and controller.serial_controller.serial_port:
        command = input("输入AT指令: ").strip()
        if command:
            response = controller.send_command(command)
            print(f"响应: {response}")
    else:
        print("❌ 请先连接串口")

def show_system_info():
    """显示系统信息"""
    print("\nℹ️  系统信息")
    print("-" * 30)
    
    if PROTECTION_ENABLED:
        from src.utils.encryption import anti_decompile
        info = anti_decompile.get_protection_info()
        
        print(f"🔒 加密保护: 已启用")
        print(f"🆔 许可证: {info['license_key']}")
        print(f"🖥️  机器码: {info['machine_id']}")
        print(f"🛡️  完整性: {'通过' if info['integrity_check'] else '失败'}")
    else:
        print("⚠️  加密保护: 未启用")
    
    print(f"🐍 Python版本: {sys.version.split()[0]}")
    print(f"📁 工作目录: {os.getcwd()}")
    print(f"⏰ 启动时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")

if __name__ == "__main__":
    # 检查是否直接运行
    if getattr(sys, 'frozen', False):
        # 如果是打包后的exe
        print("🔧 检测到打包版本，启用完整保护")
    
    # 运行带保护的主程序
    success = run_with_protection()
    
    if not success:
        print("❌ 程序启动失败")
        sys.exit(1)